//package org.finesys.ai.controller.chat;
//
//import io.swagger.v3.oas.annotations.security.SecurityRequirement;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.finesys.ai.core.DeepSeekClient;
//import org.finesys.ai.core.Json;
//import org.finesys.ai.core.SyncOrAsyncOrStreaming;
//import org.finesys.ai.core.chat.ChatCompletionChoice;
//import org.finesys.ai.core.chat.ChatCompletionRequest;
//import org.finesys.ai.core.chat.ChatCompletionResponse;
//import org.finesys.ai.core.chat.ChatRequest;
//import org.finesys.ai.core.models.ModelsResponse;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.MediaType;
//import org.springframework.util.StringUtils;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//import reactor.core.publisher.Flux;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.function.Function;
//import java.util.stream.Collectors;
//
//@RestController
//@RequiredArgsConstructor
//@RequestMapping(value = "/ollama")
//@Slf4j
//@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
//public class OllamaController {
//
//    private final DeepSeekClient deepSeekClient;
//
//    /**
//     * 流式聊天接口
//     * 根据提供的模型和提示文本，进行流式聊天并完成请求，返回聊天完成的响应。
//     *
//     * @param chatRequest 包含模型名称和用户消息的聊天请求对象
//     * @return Flux<ChatCompletionResponse> 流式聊天完成响应对象的发布者
//     */
//    @GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
//    public Flux<ChatCompletionResponse> chatCompletion(@RequestBody ChatRequest chatRequest) {
//        return deepSeekClient.chatFluxCompletion(chatRequest);
//    }
//
//
//    /**
//     * 同步聊天接口
//     * 根据提供的模型和提示文本，进行聊天并完成请求，返回聊天完成响应。
//     *
//     * @param model  模型名称，用于指定使用的聊天模型
//     * @param prompt 提示文本，作为聊天输入的内容
//     * @return ChatCompletionResponse 聊天完成响应对象
//     */
//    @GetMapping(value = "/sync/chat")
//    public ChatCompletionResponse syncChat(String prompt) {
//        ChatCompletionRequest request = ChatCompletionRequest.builder().addUserMessage(prompt).build();
//        return deepSeekClient.chatCompletion(request).execute();
//    }
//
//    /**
//     * 异步聊天接口
//     * 根据提供的模型和提示文本，进行聊天并完成请求，返回聊天完成响应。
//     *
//     * @param model  模型名称，用于指定使用的聊天模型
//     * @param prompt 提示文本，作为聊天输入的内容
//     * @return ChatCompletionResponse 聊天完成响应对象
//     */
//    @GetMapping(value = "/async/chat")
//    public void asyncChat(String prompt) {
//        SyncOrAsyncOrStreaming<String> asyncOrStreaming = deepSeekClient.chatCompletion(prompt);
//        asyncOrStreaming.onResponse(response -> {
//            log.info("返回处理数据: {}", Json.toJson(response));
//        }, error -> {
//            log.error("处理异常数据: {}", error.getMessage());
//        });
//    }
//
//    /**
//     * 获取模型列表
//     *
//     * @return 包含模型信息的响应对象
//     */
//    @GetMapping("/models")
//    public ModelsResponse models() {
//        return deepSeekClient.models();
//    }
//
//    /**
//     * 缓存提示信息
//     */
//    public static final HashMap<String, String> cache = new HashMap<>();
//
//    @GetMapping(value = "/chat/advanced", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
//    public Flux<ChatCompletionResponse> chatAdvanced(String cacheCode, String model, String prompt) {
//        if (!StringUtils.hasText(cacheCode)) {
//            cacheCode = "default";
//        }
//        ChatCompletionRequest request = ChatCompletionRequest.builder().model(model)
//                .addUserMessage(prompt)
//                .addAssistantMessage(elt.apply(cache.getOrDefault(cacheCode, "")))
//                .addSystemMessage("你是一个专业的助手")
//                .maxCompletionTokens(5000).build();
//        //只保留上一次数据
//        cache.remove(cacheCode);
//        // 聊天完成处理函数
//        String finalCacheCode = cacheCode;
//        return deepSeekClient.chatFluxCompletion(request).doOnNext(chatCompletionResponse -> {
//            String content = choicesProcess.apply(chatCompletionResponse.choices());
//            cache.merge(finalCacheCode, content, String::concat);
//        }).doOnError(e -> {
//            log.error("/chat/advanced error: {}", e.getMessage());
//        });
//    }
//
//    // 聊天选择处理函数
//    Function<List<ChatCompletionChoice>, String> choicesProcess = list -> list.stream().map(e -> e.delta().content())
//            .collect(Collectors.joining());
//    // 聊天完成处理函数
//    Function<String, String> elt = s -> s.replaceAll("<think>[\\s\\S]*?</think>]]", "").replaceAll("\n", "");
//}
